Non-volatile memory is commonly used for mass storage of data, such as within consumer electronic devices. Various types of mass storage devices are currently in use, such as solid state devices (SSDs), hard disk drives (HDDs), and hybrid drives. Flash memory devices (e.g., SSDs) have developed into a popular source of non-volatile memory for a wide range of electronic applications. Common uses for flash memory include personal computers, flash drives, digital cameras, and cellular telephones. Program code and system data such as a basic input/output system (BIOS) are also stored in flash memory devices for use in personal computer systems.
Conventional flash memory devices may include an array of memory cells organized into memory blocks that can be erased on a block-by-block basis (and reprogrammed on a page-by-page basis). Flash memory may achieve higher levels of storage capacity by including multi-level cells (MLC), triple-level cells (TLC), quad-level cells (QLC), etc., or combinations thereof in which the memory cell has multiple levels that enable more bits (i.e., data values) to be stored. For example, in a single-level cell (SLC), two states can exist such that only one bit per cell may be stored. MLC may be configured to store two bits per cell, TLC may be configured to store three bits per cell, QLC may be configured to store four bits per cell, and so on. Blocks may be written in different possible modes depending on the types of cells involved. For example, a QLC may be written to using QLC mode, TLC mode, MLC mode or even SLC mode. Thus, writing to a QLC in QLC mode may result in four bits being stored in the QLC, writing to a QLC in TLC mode may result in three bits being stored in the QLC, writing to a QLC in MLC mode may result in two bits being stored in the QLC, writing to a QLC in SLC mode may result in one bit being stored in the QLC. The other cell types can be programmed in different modes in a similar manner. Writing to a QLC/TLC/MLC in SLC mode may be faster than writing in the QLC/TLC/MLC modes; however, it may come at a cost by reducing the storage capacity of the memory device by writing to the QLC/TLC/MLC cells by not maximizing their capabilities.
During programming of a block of memory cells, a fixed cache of SLC memory cells is often used to temporarily store data that is to be programmed into a block of higher capacity memory cells of the memory device. For example, in an MLC-based memory device, a fixed size SLC cache can be used by the memory controller to store data in the SLC cache prior to subsequent programming into the MLC block of memory cells. This can improve memory speed as well as resulting in a higher total bytes written (TBW) due, in part, to a larger endurance capability. The performance improvement may be a function of the size of the SLC cache, but has the drawback of reducing the total storage capacity of the memory device because a fixed portion of the memory is used as a SLC cache and cannot be used to store user data with the same efficiency as MLC (or TLC, QLC, etc.).
Other conventional systems have used a dynamic SLC cache as an alternative to the fixed SLC cache. With a dynamic SLC cache, the entire memory array may include the higher level cells but the memory controller may allocate a portion of the memory array dynamically to write to in SLC mode when caching is desired. Overall storage capacity for the cache may be increased, but at the expense of reducing the capacity of the main memory array and the endurance capability of the cache.